home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 12: Textmags & Docs / nf_archive_12.iso / MAGS / SOURCES / ATARI_SRC.ZIP / atari source / AHDI / TTDRIVER / ACSC / TEST.S < prev    next >
Encoding:
Text File  |  2001-02-09  |  8.2 KB  |  497 lines

  1. ;;; test.s
  2. ;
  3. ;    test -- repeated writes/reads to TOS logical device
  4. ;
  5. ;    mac -p -o test.prg test.s        ; buffer in ST RAM
  6. ;    mac -dFASTRAM -p -o testfr.prg test.s    ; buffer in FAST RAM
  7. ;    mac -dDEVICE=0 -p -o testflp.prg test.s    ; device != 2
  8. ;    mac -dOFFSET=1 -p -o test1.prg test.s    ; non-aligned xfers
  9. ;
  10. ;    15Mar89    jwt    kludged together, beware the Ides
  11. ;    16Mar89    jwt    added non-aligned transfers
  12. ;    08Aug89    jwt    more flexibility in buffer alignment, local stack
  13. ;    10Aug89    jwt    show device driver version
  14. ;    20Aug89    jwt    add test for second bank of system RAM (no Malloc()!)
  15.  
  16.   .if !(^^defined DEVICE)
  17. DEVICE    EQU    2
  18.   .endif
  19.  
  20.   .if !(^^defined OFFSET)
  21. OFFSET    EQU    2
  22.   .endif
  23.  
  24.   .if (DEVICE=0)|(DEVICE=1)
  25. RECNO    EQU    $40
  26.   .else ; a hard disk
  27. RECNO    EQU    $1000
  28.   .endif
  29.  
  30. SECCNT    EQU    40
  31. BUFSIZ    EQU    SECCNT*$200
  32. SLOP    EQU    8        ; space allowed between buffers (in bytes)
  33.  
  34. RWABS    EQU    4
  35. READ    EQU    0
  36. WRITE    EQU    1
  37.  
  38. BIOS    EQU    13
  39.  
  40. LF    EQU    $0A
  41. CR    EQU    $0D
  42.  
  43. hdv_bpb    equ    $472
  44.  
  45.   .if ^^defined FASTRAM
  46. rbuffer    EQU    $01000000+OFFSET
  47. rbuf2    EQU    rbuffer+BUFSIZ+SLOP
  48. rbuf3    EQU    rbuf2+BUFSIZ+SLOP
  49.   .endif
  50.  
  51.   .if ^^defined SYS2RAM
  52. rbuffer    EQU    $00200000+OFFSET
  53. rbuf2    EQU    rbuffer+BUFSIZ+SLOP
  54. rbuf3    EQU    rbuf2+BUFSIZ+SLOP
  55.   .endif
  56.  
  57.     .include "version.s"
  58.  
  59.     .text
  60. start:    move.l    #stack,d0
  61.     andi.b    #$FC,d0        ; make sure it is long word aligned
  62.     movea.l    d0,sp        ; set up our local stack
  63.  
  64.     movea.l    #msg,a0
  65.     bsr    puts
  66.   .if !((^^defined FASTRAM)|(^^defined SYS2RAM))
  67.     move.l    buffer,d0    ; is it properly aligned?
  68.     andi.l    #3,d0
  69.     cmpi.w    #OFFSET,d0
  70.     beq.s    start1
  71.     neg.l    d0
  72.     addq.l    #OFFSET+4,d0
  73.     add.l    d0,buffer
  74.     add.l    d0,buf2
  75.     add.l    d0,buf3
  76.   .endif ; no FASTRAM or SYS2RAM
  77. start1:    move.l    buffer,d0
  78.     bsr    putlon
  79.  
  80.     movea.l    #rb2msg,a0
  81.     bsr    puts
  82.     move.l    buf2,d0
  83.     bsr    putlon
  84.  
  85.     movea.l    #rb3msg,a0
  86.     bsr    puts
  87.     move.l    buf3,d0
  88.     bsr    putlon
  89.  
  90.     movea.l    #ofmsg,a0
  91.     bsr    puts
  92.  
  93.     move.l    buffer,d0
  94.     andi.w    #3,d0
  95.     bsr    putbyt
  96.  
  97.     movea.l    #blkmsg,a0
  98.     bsr    puts
  99.  
  100.     move.w    #RECNO,d0
  101.     bsr    putwor
  102.  
  103.     movea.l    #secmsg,a0
  104.     bsr    puts
  105.  
  106.     move.w    #SECCNT,d0
  107.     bsr    putwor
  108.  
  109.   .if (DEVICE>1)
  110.     movea.l    #crlf,a0
  111.     bsr    puts
  112.  
  113.     movea.l    #crlf,a0
  114.     bsr    puts
  115.  
  116.     move.l    #gethdv,-(sp)
  117.     move.w    #38,-(sp)    ; Supexec(GetHDV)
  118.     trap    #14
  119.     addq    #6,sp
  120.  
  121.     movea.l    lhdv_bpb,a3
  122. .1:    cmpi.b    #'@',(a3)
  123.     bne.s    .6
  124.     cmpi.b    #'(',1(a3)
  125.     bne.s    .6
  126.     cmpi.b    #'#',2(a3)
  127.     bne.s    .6
  128.     cmpi.b    #')',3(a3)
  129.     bne.s    .6
  130.     lea    4(a3),a0
  131.     bsr    puts
  132.     bra.s    start2
  133.  
  134. .6:    subq    #1,a3
  135.     cmpa.l    #$7FF,a3
  136.     bne    .1
  137.  
  138.     movea.l    #unkdrv,a0
  139.     bsr    puts
  140.   .endif ; (DEVICE>1)
  141.  
  142. start2:    movea.l    #sure,a0
  143.     bsr    puts
  144.     move.w    #DEVICE,d0
  145.     bsr    putbyt
  146.     movea.l    #sure2,a0
  147.     bsr    puts
  148.     move.b    #80,rbuffer
  149.     move.l    #rbuffer,-(sp)
  150.     move.w    #$0a,-(sp)
  151.     trap    #1
  152.     addq    #6,sp
  153.     movea.l    #crlf,a0
  154.     bsr    puts
  155.  
  156.     move.b    rbuffer+2,d0    ; get the first character of the answer
  157.     cmpi.b    #'Y',d0
  158.     beq.s    .0
  159.     cmpi.b    #'y',d0
  160.     bne    exit
  161. .0:    move.l    #0,pass
  162.     move.l    #0,errors
  163.     move.b    #0,bHadError
  164.  
  165.   .if (DEVICE=0) | (DEVICE=1)
  166.     move.w    #DEVICE,-(sp)
  167.     move.w    #7,-(sp)    ; getBPB()
  168.     trap    #13
  169.     addq    #4,sp
  170.   .endif
  171.  
  172. loop:    movea.l    buffer,a0    ; initialize the buffer
  173.     move.l    pass,d0        ; data pattern
  174.     move.w    #BUFSIZ-1,d1
  175. loop1:    move.b    d0,(a0)+
  176.     addq.b    #1,d0
  177.     dbra    d1,loop1
  178.  
  179.     move.l    #$11223344,(a0)+
  180.     move.l    #$55667788,(a0)
  181.  
  182.     movea.l    #pasmsg,a0
  183.     bsr    puts
  184.  
  185.     move.l    pass,d0
  186.     bsr    putlon
  187.  
  188.     movea.l    #ecntmsg,a0
  189.     bsr    puts
  190.  
  191.     move.l    errors,d0
  192.     bsr    putlon
  193.  
  194.     move.w    #' ',d0    
  195.     bsr    putc
  196.  
  197.     move.w    #'W',d0
  198.     bsr    putc
  199.  
  200.     move.w    #DEVICE,-(sp)
  201.     move.w    #RECNO,-(sp)
  202.     move.w    #SECCNT,-(sp)
  203.     move.l    buffer,-(sp)
  204.     move.w    #WRITE,-(sp)
  205.     move.w    #RWABS,-(sp)
  206.     trap    #BIOS
  207.     adda.l    #14,sp
  208.  
  209.     or.b    d0,d0
  210.     beq.s    .1
  211.  
  212.     neg    d0
  213.     bsr    putbyt
  214.     addi.l    #1,errors
  215.     movea.l    #crlf,a0
  216.     bra    .55
  217.  
  218. .1:    movea.l    buf2,a0        ; clear out the buffer(s)
  219.     movea.l    buf3,a1
  220.     clr.l    d0
  221.     move.w    #BUFSIZ-1,d1
  222. .10:    move.b    d0,(a0)+
  223.     move.b    d0,(a1)+
  224.     dbra    d1,.10
  225.  
  226.     move.w    #'R',-(sp)
  227.     move.w    #2,-(sp)
  228.     trap    #1
  229.     addq    #4,sp
  230.  
  231.     move.w    #DEVICE,-(sp)
  232.     move.w    #RECNO,-(sp)
  233.     move.w    #SECCNT,-(sp)
  234.     move.l    buf2,-(sp)
  235.     move.w    #READ,-(sp)
  236.     move.w    #RWABS,-(sp)
  237.     trap    #BIOS
  238.     adda.l    #14,sp
  239.  
  240.     or.b    d0,d0
  241.     beq.s    .2
  242.  
  243.     neg    d0
  244.     bsr    putbyt
  245.     addi.l    #1,errors
  246.     movea.l    #crlf,a0
  247.     bra    .55
  248.  
  249. .2:    move.w    #'S',-(sp)
  250.     move.w    #2,-(sp)
  251.     trap    #1
  252.     addq    #4,sp
  253.  
  254.     move.w    #DEVICE,-(sp)
  255.     move.w    #RECNO,-(sp)
  256.     move.w    #SECCNT,-(sp)
  257.     move.l    buf3,-(sp)
  258.     move.w    #READ,-(sp)
  259.     move.w    #RWABS,-(sp)
  260.     trap    #BIOS
  261.     adda.l    #14,sp
  262.  
  263.     or.b    d0,d0
  264.     beq.s    .21
  265.  
  266.     neg    d0
  267.     bsr    putbyt
  268.     addi.l    #1,errors
  269.     movea.l    #crlf,a0
  270.     bra    .55
  271.  
  272. .21:    move.w    #'C',-(sp)
  273.     move.w    #2,-(sp)
  274.     trap    #1
  275.     addq    #4,sp
  276.  
  277.     movea.l    buffer,a3    ; pointer to the write buffer
  278.     movea.l    buf2,a4        ; pointer to the read buffer
  279.     movea.l    buf3,a5        ; pointer to second read buffer
  280.     move.w    #BUFSIZ-1,d5    ; number of bytes in the buffer
  281. .3:    move.b    (a3)+,d3    ; get a byte that was written
  282.     move.b    (a4)+,d4    ; get the byte as read back
  283.     move.b    (a5)+,d5    ; get the other read result
  284.     cmp.b    d3,d4        ; are they the same
  285.     bne.s    .31        ; yes, okay fine
  286.     cmp.b    d3,d5
  287.     beq    .4
  288.  
  289. .31:    addi.l    #1,errors
  290.     move.w    #-1,bHadError
  291.  
  292.     movea.l    #errmsg,a0
  293.     bsr    puts
  294.  
  295.     move.l    a3,d0
  296.     subq.l    #1,d0        ; adjust for already auto ++ing
  297.     bsr    putlon
  298.  
  299.     movea.l    #err1msg,a0
  300.     bsr    puts
  301.  
  302.     move.l    a3,d0
  303.     sub.l    buffer,d0
  304.     subq.w    #1,d0
  305.     bsr    putwor
  306.  
  307.     movea.l    #err2msg,a0
  308.     bsr    puts
  309.  
  310.     move.w    d3,d0
  311.     bsr    putbyt        ; show d3 == (a3)
  312.  
  313.     movea.l    #err3msg,a0
  314.     bsr    puts
  315.  
  316.     move.w    d4,d0        ; show d4 == (a4)
  317.     bsr    putbyt
  318.  
  319.     movea.l    #err4msg,a0
  320.     bsr    puts
  321.  
  322.     move.w    d5,d0        ; show d5 == (a5)
  323.     bsr    putbyt
  324.  
  325.   .if (DEVICE>1)
  326.     move.l    #getres,-(sp)
  327.     move.w    #38,-(sp)
  328.     trap    #14
  329.     addq    #6,sp
  330.  
  331.     movea.l    #resmsg,a0
  332.     bsr    puts
  333.  
  334.     move.l    lresidue,d0
  335.     bsr    putlon
  336.  
  337.     movea.l    #ptrmsg,a0
  338.     bsr    puts
  339.  
  340.     move.l    lptr,d0
  341.     bsr    putlon
  342.   .endif ;(DEVICE>1)
  343.  
  344.     move.w    #$b,-(sp)    ; is there a character typed?
  345.     trap    #1
  346.     addq    #2,sp
  347.  
  348.     or.w    d0,d0        ; -1 if so
  349.     bne.s    .99
  350.  
  351. .4:    dbra    d5,.3
  352.  
  353.     tst.w    bHadError
  354.     beq.s    .5
  355.  
  356.     movea.l    #crlf,a0
  357.     bsr    puts
  358.  
  359.     clr.w    bHadError
  360.  
  361. .5:    move.w    #'.',-(sp)
  362.     move.w    #2,-(sp)
  363.     trap    #1
  364.     addq    #4,sp
  365.  
  366.     movea.l    #crmsg,a0
  367. .55:    bsr    puts
  368.  
  369.     addi.l    #1,pass
  370.  
  371.     move.w    #$b,-(sp)    ; is there a character typed?
  372.     trap    #1
  373.     addq    #2,sp
  374.  
  375.     or.w    d0,d0        ; -1 if so
  376.     beq    loop
  377.  
  378. .99:    move.w    #1,-(sp)    ; read and ignore the character
  379.     trap    #1
  380.     addq    #2,sp
  381.  
  382. exit:    move.w    #0,-(sp)
  383.     move.w    #$4c,-(sp)
  384.     trap    #1
  385.  
  386.   .if (DEVICE>1)
  387. gethdv:    move.l    hdv_bpb,lhdv_bpb
  388.     rts
  389.  
  390. getres:    move.l    $FFFF8710,lresidue
  391.     movea.l    #$FFFF8701,a0
  392.     movep.l    (a0),d0
  393.     move.l    d0,lptr
  394.     rts
  395.   .endif (DEVICE>1)
  396.  
  397. ;
  398. ;    putlon - put d0.l as 8 hex digits
  399. ;    putwor - put d0.w as 4 hex digits
  400. ;    putbyt - put d0.b as 2 hex digits
  401. ;    putnib - put 4 lsbs as a hex digit
  402.  
  403. putlon:    move.l    d0,-(sp)
  404.     swap    d0
  405.     bsr.s    putwor
  406.     move.l    (sp)+,d0
  407. putwor:    move.w    d0,-(sp)
  408.     asr    #8,d0
  409.     bsr.s    putbyt
  410.     move.w    (sp)+,d0
  411. putbyt:    move.w    d0,-(sp)
  412.     asr    #4,d0
  413.     bsr.s    putnib
  414.     move.w    (sp)+,d0
  415. putnib:    andi.b    #$0f,d0
  416.     addi.b    #'0',d0
  417.     cmpi.b    #'9',d0
  418.     ble.s    putb2
  419.     addq.b    #7,d0
  420. putc:
  421. putb2:    move.l    d0,-(sp)
  422.  
  423.     move.w    d0,-(sp)
  424.     move.w    #2,-(sp)
  425.     trap    #1
  426.     addq    #4,sp
  427.  
  428.     move.l    (sp)+,d0
  429.     rts
  430.  
  431. puts:    move.l    a0,-(sp)
  432.     move.w    #9,-(sp)
  433.     trap    #1
  434.     addq    #6,sp
  435.     rts
  436.  
  437.     .data
  438. msg:    dc.b    'Disk Read/Write  (through Rwabs())'
  439.     dc.b    CR,LF
  440.     dc.b    '  ('
  441.     VERSION
  442.     dc.b    ')',CR,LF
  443.     dc.b    ' Write buffer @ 0x',0
  444. rb2msg:    dc.b    CR,LF,' Read buffer1 @ 0x',0
  445. rb3msg:    dc.b    CR,LF,' Read buffer2 @ 0x',0
  446. ofmsg:    dc.b    CR,LF,'  offset: ',0
  447. blkmsg:    dc.b    CR,LF,'  starting at sector: 0x',0
  448. secmsg:    dc.b    '  number of sectors: 0x',0
  449.  
  450.   .if (DEVICE>1)
  451. unkdrv:    dc.b    '*** Unknown device driver***',CR,LF,0
  452. resmsg:    dc.b    CR,LF,'Residue: 0x',0
  453. ptrmsg:    dc.b    '  Ptr: 0x',0
  454.   .endif ;(DEVICE>1)
  455.  
  456. sure:    dc.b    CR,LF
  457.     dc.b    'Are you SURE you want to trash media in TOS unit ',0
  458. sure2:    dc.b    ' ?',0
  459. crlf:    dc.b    CR,LF,0
  460. crmsg:    dc.b    CR,0
  461.  
  462. pasmsg:    dc.b    'Pass: 0x',0
  463. ecntmsg: dc.b    ' Errors: 0x',0
  464. errmsg:    dc.b    CR,LF,'Error @ wbuf 0x',0
  465. err1msg: dc.b    ' (offset 0x',0
  466. err2msg: dc.b    ')  Wr: 0x',0
  467. err3msg: dc.b    ' Rd: 0x',0
  468. err4msg: dc.b    ' 2nd Rd: 0x',0
  469.     .even
  470.  
  471. buffer:    dc.l    rbuffer
  472. buf2:    dc.l    rbuf2
  473. buf3:    dc.l    rbuf3
  474.  
  475.     .bss
  476. pass:    ds.l    1
  477. errors:    ds.l    1
  478. lhdv_bpb: ds.l    1
  479. lresidue: ds.l    1
  480. lptr:    ds.l    1
  481. bHadError: ds.w    1
  482.  
  483.   .if !((^^defined FASTRAM)|(^^defined SYS2RAM))
  484.     ds.b    SLOP
  485. rbuffer: ds.b    BUFSIZ
  486.     ds.b    SLOP
  487. rbuf2:    ds.b    BUFSIZ
  488.     ds.b    SLOP
  489. rbuf3:    ds.b    BUFSIZ
  490.     ds.l    2
  491.   .endif
  492.  
  493.     ds.l    1
  494.     ds.b    4096
  495. stack:    ds.l    1
  496.     .end
  497.